"""
@name : 1-练习题
@author : ysy
@projectname: tlbb
"""


# 1.输入数字n，输出n天前的日期（time或者datetime模块）
# import datetime
# n = int(input("请问想知道几天前的日期："))
# # datetime.date.today():获取今天的日期
# # datetime.timedelta():时间间隔，即两个时间点之间的长度
# print(datetime.date.today() - datetime.timedelta(n))


# 2.输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
# import os
# n = input("请输入文件夹的绝对路径：")
# # os.listdir:返回指定目录下的所有文件和目录名
# ls = os.listdir(n)
# for i in ls:
#     print(i)


# 3.列表去重，并且从小到大排序
# a = [1,2,1,5,7,8,3,5,2,1,2,1]
# # set():先把列表变为集合，集合是一个不包含重复字符的无序序列
# # list():把集合再变为列表
# b = list(set(a))
# # # 降序排列
# # b.sort(reverse=True)
# # # 保持原有序列顺序
# # b.sort(key=a.index)
# print(b)


# 4.如何在一个函数内部修改全局变量
# a = 100
# b = 200
#
# def global_variable():
#     # 希望修改全局变量的值 - 使用global声明一下变量即可
#     # global 关键字会告诉解释器后面的变量是一个全局变量
#     # 再使用赋值语句时，就不会创建局部变量
#     global a, b
#     a = 20
#     b = 10
#
# global_variable()
# print(a)
# print(b)


# 5.如何跨模块共享全局变量
# 在单个程序中跨模块共享信息的规范方法是创建一个特殊模块（通常称为config或cfg）
# 只需在应用程序的所有模块中导入配置模块；然后该模块可用作全局名称。
# 因为每个模块只有一个实例，所以对模块对象所做的任何更改都会在任何地方反映出来


# 6.python的基本数据类型有哪些？
# 六个标准的数据类型：Number(数字)、String(字符串)、List(列表)、
#                 Tuple(元组)、Set(集合)、Dictionary(字典)


# 7.python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# import random
#
# # random.randint():生成随机一个[a,b]的整数
# num1 = random.randint(1, 10)
# print(num1)
#
# # random.uniform():生成随机一个[a,b)的浮点数
# num2 = random.uniform(1, 10)
# print(num2)
#
# # random.random():生成随机一个[0,1)的浮点数
# num3 = random.random()
# print(num3)


# 8.python中哪些是可变数据类型，哪些是不可变数据类型
# 不可变数据类型(3个)：Number(数字)、String(字符串)、Tuple(元组)
# 可变数据类型(3个)：List(列表)、Set(集合)、Dictionary(字典)


# 9.a+=1与a=a+1有什么区别
# a+=1:
# 首先 += : python底层调用__iadd__()方法
# 对于不可变对象：进行+=操作后，在栈中重新创建了新的对象
# 对于可变对象：不会在栈中重新创建新的对象
# a=a+1:
# 首先 + : python底层调用__add__()方法
# 不可变对象：栈中重新创建新对象
# 可变对象：在栈中重新创建新对象


# 10.什么是pep8? 说出5点它的标准
#  pep8就是一种编码规范
#  1.使用4个空格的缩进，不要使用制表符（tab键）
#  2.折行以确保其不会超过79个字符。有助于小显示器用户阅读，也可以让大显示器能并排显示几个代码文件
#  3.使用空行分隔函数和类，以及函数内的大块代码
#  4.如果可能，注释独占一行
#  5.使用文档字符串
#  6.运算符周围和逗号后面使用空格，但是括号里侧不加空格：a = f(1, 2) + q(3, 4)


# 11.给定一个字符串，找出字符串第一个重复的字符
# a = "3246781540"
# first_same = ""
# for i in range(len(a)):
#     if a.count(a[i]) > 1:
#         first_same += a[i]
#         print(first_same)
#         break
# else:
#     print("不存在有重复字符")


# 12.简述深拷贝与浅拷贝
# 深浅拷贝：主要是针对可变容器类型里面包含可变容器类型的情况
# 深拷贝：递归拷贝所有层的数据
# 浅拷贝：拷贝第一层数据（地址）


# 13.简述python内存机制
#  1.重复使用内存空间
#  2.引用计数器
#  3.对象引用
#  4.循环引用与拓扑图
#  5.减少引用计数的两种方法
#    1.用del删除某一个引用
#    2.将变量指向另外一个引用，或设置为None，也就是引用重定向
#  6.垃圾回收


# 14.使用python实现冒泡排序，快速排序
# def bubble_sort(arr):
#     # 遍历所有元素
#     for i in range(len(arr)):
#         for j in range(0, len(arr)-1):
#             if arr[j] > arr[j+1]:
#                 arr[j], arr[j+1] = arr[j+1], arr[j]
#
#
# arr = [1, 3, 52, 54, 23, 65, 4, 25, 36, 9, 74, 18]
# bubble_sort(arr)
# print(arr)


# 15.验证一个字符串是否属于回文（从左到右，从右到左都是一样）
# a = input("请输入需要验证的字符串：")
# if a == a[::-1]:
#     print("是回文字符串")
# else:
#     print("不是回文字符串")
